/**
 * 
 */
package tur.br.moradadosol.view.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import tur.br.moradadosol.control.HospedagemControl;
import tur.br.moradadosol.control.HospedeControl;
import tur.br.moradadosol.control.UserAutentication;
import tur.br.moradadosol.model.Hospedagem;
import tur.br.moradadosol.view.form.SaidaForm;

/**
 * @author Alex Kayser
 *
 */
public class SaidaAction extends Action {
	
	public ActionForward execute(
			ActionMapping mapping,
			ActionForm form,
			HttpServletRequest request,
			HttpServletResponse response)
			throws Exception {

		HttpSession session = request.getSession();

		if(!UserAutentication.isUserAutenticated(session)) {
			return mapping.findForward("login");
		}
		
		ActionMessages errors = new ActionMessages();
		
		SaidaForm Form = (SaidaForm)form;
		
		HospedagemControl hospedagemControl =
			(HospedagemControl)session.getAttribute("hospedagemControl");
		if(hospedagemControl == null) {
			hospedagemControl = new HospedagemControl();
		}
		
		HospedeControl hospedeControl = 
			(HospedeControl) session.getAttribute("hospedeControl");
		if(hospedeControl == null) {
			hospedeControl = new HospedeControl();
		}
		
		long codigoHospedagem = 0;
		if(request.getParameter("codigoHospedagem") != null
			&& !request.getParameter("codigoHospedagem").equals("")) {
			
			codigoHospedagem = Long.parseLong(
				request.getParameter("codigoHospedagem"));
		}
		
		if(Form.getProcurarHospedagem().length() > 0) {
			session.setAttribute("pagina", "saida");
			
			return mapping.findForward("procurareserva");
		} else if(Form.getFechar().length() > 0) {
			
			codigoHospedagem = Form.getCodigo();
			
			if(codigoHospedagem == 0) {
				errors.add("error.saida", 
						new ActionMessage("error.saida.hospedagem.required"));
			} else {
				
				Hospedagem hospedagem = hospedagemControl.getHospedagemByCodigo(codigoHospedagem);
				
				hospedagem.setStatus(Hospedagem.STATUS_SAIDA);
				hospedagem.setRestante(Form.getRestante());
				hospedagem.setSaida(Form.getSaida());
				hospedagem.setRestantePago(true);
				
				hospedagemControl.atualizar(hospedagem);
				
				request.removeAttribute("codigoHospedagem");
				codigoHospedagem = 0;
				
				//Mostra alguma mensagem de sucesso?
				session.setAttribute(
						"msgFechamento", "Conta da hospedagem fechada.");
				
				//encaminhar para pesquisa
				session.setAttribute("hospede", hospedagem.getHospede());
			}
		}
		
		if(codigoHospedagem != 0) {
			Hospedagem hospedagem = hospedagemControl.getHospedagemByCodigo(
				codigoHospedagem);
			
			Form.setHospedagem(hospedagem);
		}
		
		return mapping.getInputForward();
	}
}
